/*
 * Copyright 2014 Щекотова Ангелина Александровна.
 * Этот файл — часть J4JClientServer Framework
 * J4JClientServer Framework - свободная программа: вы можете перераспространять ее и/или изменять
 * ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде, в каком
 * она была опубликована Фондом свободного программного обеспечения; либо
 * версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 *
 * J4JClientServer Framework распространяется в надежде, что она будет полезной,
 * но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 * или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 * общественной лицензии GNU.
 *
 * Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 * вместе с этой программой. Если это не так, см.
 * <http://www.gnu.org/licenses/>.
 */

package ru.java4java.ClientServerFramework.interfaces;


import ru.java4java.ClientServerFramework.SocketHandler;

/**
 * @see SocketHandlerListener#beforeGet(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#afterGet(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#beforeSend(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#afterSend(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#beforeStart(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#beforeShutdown(ru.java4java.ClientServerFramework.SocketHandler)
 * @see SocketHandlerListener#afterShutdown(ru.java4java.ClientServerFramework.SocketHandler)
 */
public interface SocketHandlerListener {

    /** <pre>
     * Запускается перед получением пакета.
     * </pre>
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     */
    public void beforeGet(SocketHandler socketHandler);

    /** <pre>
     * Запускается после получения пакета.
     * </pre>
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     * @see ru.java4java.ClientServerFramework.SocketHandler#getIncoming()
     */
    public void afterGet(SocketHandler socketHandler);

    /** <pre>
     * Запускается перед отправкой пакета.
     * </pre>
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     * @see ru.java4java.ClientServerFramework.SocketHandler#getIncoming()
     * @see ru.java4java.ClientServerFramework.SocketHandler#getOutgoing()
     * @see ru.java4java.ClientServerFramework.SocketHandler#setOutgoing(ru.java4java.ClientServerFramework.impl.Packet)
     */
    public void beforeSend(SocketHandler socketHandler);

    /** <pre>
     * Запускается после отправки пакета.
     * </pre>
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     */
    public void afterSend(SocketHandler socketHandler);

    /**
     * Запускается перед запуском цикла обработки получения и отправки пакетов.
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     */
    public void beforeStart(SocketHandler socketHandler);

    /**
     * Запускается перед завершением работы.
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     */
    public void beforeShutdown(SocketHandler socketHandler);

    /**
     * Запускается после завершением работы.
     * @param socketHandler {@link ru.java4java.ClientServerFramework.SocketHandler}
     */
    public void afterShutdown(SocketHandler socketHandler);

}
